﻿//#define TRACE_ON
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ProjectEulerSolutions.Problems
{
    /*
     * Working from left-to-right if no digit is exceeded by the digit to its left it is called an increasing number; for example, 134468.

Similarly if no digit is exceeded by the digit to its right it is called a decreasing number; for example, 66420.

We shall call a positive integer that is neither increasing nor decreasing a "bouncy" number; for example, 155349.

Clearly there cannot be any bouncy numbers below one-hundred, but just over half of the numbers below one-thousand (525) are bouncy. In fact, the least number for which the proportion of bouncy numbers first reaches 50% is 538.

Surprisingly, bouncy numbers become more and more common and by the time we reach 21780 the proportion of bouncy numbers is equal to 90%.

Find the least number for which the proportion of bouncy numbers is exactly 99%.

     * */
    class Problem112 : IProblem
    {
        public string Calculate()
        {
            long i = 100;

            long count = 0;

            while (count * 100 / i < 99)
            {
                i++;
                long tempI = i;

                bool ascending = false;
                bool descending = false;

                long previous = tempI % 10;
                tempI /= 10;
                while (tempI > 0)
                {
                    long current = tempI % 10;

                    if (previous > current)
                        ascending = true;
                    if (previous < current)
                        descending = true;

                    if (ascending && descending)
                        break;

                    previous = current;
                    tempI /= 10;
                }

                bool bouncing = ascending && descending;
                if (bouncing)
                {
                    count++;
#if TRACE_ON
                    Console.WriteLine(String.Format("{0}:\t {1}", i, bouncing ? "Bouncing" : ascending ? "Ascending" : "Descending"));
#endif
                }
                
                
            }
            return i.ToString();
        }
    }
}
